package com.example.framework2002;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.example.framework2002.databinding.ActivityMainBinding;
import com.example.framework2002.storage.impl.MessageEvent;
import com.example.imageloader.IImageLoader;
import com.example.imageloader.ImageLoaderManager;
import com.example.imageloader.ImageOptions;
import com.example.imageloader.impl.Picassolmpl;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

public class MainActivity extends AppCompatActivity {
    private  ActivityMainBinding binding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        ImageOptions options = new ImageOptions.Builder()
                .setPlaceImage(R.drawable.ic_launcher_foreground)
                .setErrorImage(R.drawable.ic_launcher_background)
                .build();
        String url = "https://ts1.cn.mm.bing.net/th/id/R-C.97a6a54293fa4036f23a806d4d3c6e9c?rik=jCtt2DfnyheHgQ&riu=http%3a%2f%2fwww.pp3.cn%2fuploads%2f20120330LW%2f55.jpg&ehk=MSFnH%2bC7kN%2bAAujUKoCl3lYcKDlAlKNh7zY4EjYm2eY%3d&risl=&pid=ImgRaw&r=0";
         ImageLoaderManager.getInstance().LoadImage(this,url,options,binding.iv);
//需要接收数据的组件，注册 EventBus，成为订阅者
        EventBus.getDefault().register(this);
        String text = "组件间通信成功：数据同步完成";
        EventBus.getDefault().post(new MessageEvent(text));

    }
    //在 onDestroy方法中注销 EventBus
    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);

    }
    public void onClick(View view) {
        startActivity(new Intent(this, MainActivity2.class));
    }
    /*
        EventBus 3.0之后，订阅方法的方法名支持自定义，无需硬性规定以 onEventXX 开头定
        义的方法名，但要用 public 修饰该方法，需要使用 @Subscribe 注解，表示在调用
        register后该订阅方法才有效，当接收到事件的时候，会调用该方法。
        只有那些同时满足public访问权限、非static方法、非abstract方法、有且只有一个参数
        和使用了@Subscribe注解的方法才被当做是合法的订阅者方法。

        EventBus 中的 threadMode ---->
        ThreadMode.Main：如果当前线程就是主线程，那么直接调用订阅者方法，在主线程执行。反之，先进入队列，后面将在主线程的Handler中调用订阅者方法。
        ThreadMode.MAIN_ORDERED：直接进入队列，后面将在主线程的Handler中调用订阅者方法。
        ThreadMode.Post：该方法的执行和事件发送者在同一个线程中，适用于对是否在
        主线程执行无要求的情况，但post线程为主线程，则不能有耗时操作。
        ThreadMode.Background：如果发送事件的线程不是UI线程，则运行在该线程中。如果发
        送事件的是UI线程，则它运行在由EventBus维护的一个单独的线程中。多个事件会同步地被
        这个单独的后台线程所处理。适用于轻微耗时的操作，比如读写数据库。
        ThreadMode.Async：运行在单独的工作线程中，不论发送事件的线程是否为主线程。
        跟BackgroundThread不一样，该模式的所有线程是独立的，因此适用于长耗时操作，例如网络访问。
*/
//      需要接受数据的组件，自定义订阅方法
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(MessageEvent messageEvent) {
        Log.d("123", "receive message111"+messageEvent.getMessage());
        binding.tv.setText(messageEvent.getMessage());
        Toast.makeText(this, ""+messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
    }
}























